package sg.edu.nus.iss.billing.entity;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import sg.edu.nus.iss.billing.entity.service.Service;
import sg.edu.nus.iss.billing.template.BasicParseActionProcessor;


public class Bill {
	
	public static final String SUBS_TOTAL = "Subscription Total";
	public static final String USAGE_TOTAL = "Usage Total";
	public static final String IDD_USAGE_TOTAL = "IDD Calls";
	public static final String ROAMING_USAGE_TOTAL = "Roaming Calls";
	public static final String LOCAL_USAGE_TOTAL = "Local Calls";
	public static final String GROUP_SUBS_LINE = "subscription.line";
	public static final String GROUP_VAS_LINE = "subscription.vas.line";
	public static final String GROUP_SUBS_USAGE = "subscription.usage";
	public static final String GROUP_SUBS = "subscription";
	
	private String accountNumber;
	private Customer clonedCustomer;
	private Date billingDate;
	private Date billingDueDate;
	private Date cutoffStartDate;
	private Date cutoffEndDate;
	private BigDecimal previousBalance = new BigDecimal(0);
	private BigDecimal previousPayment = new BigDecimal(0);
	private BigDecimal thisBillCharges = new BigDecimal(0);
	private BigDecimal totalBalance = new BigDecimal(0);
	private BigDecimal lastPayment = new BigDecimal(0);
	private BigDecimal currentGSTCharge = new BigDecimal(0);
	private Date lastPaymentReceivedDate;
	private List<PaymentHistory> paymentHistoryList; //dynamic section for summary - payment details
	private Map<String, List<ChargeComponent>> chargeComponentMap;
	
	public BigDecimal getThisBillCharges() {
		return thisBillCharges;
	}

	public void setThisBillCharges(BigDecimal thisBillCharges) {
		this.thisBillCharges = thisBillCharges;
	}
	
	public BigDecimal getCurrentGSTCharge() {
		return currentGSTCharge;
	}

	public void setCurrentGSTCharge(BigDecimal currentGSTCharge) {
		this.currentGSTCharge = currentGSTCharge;
	}

	public Map<String, List<ChargeComponent>> getChargeComponentMap() {
		return chargeComponentMap;
	}

	public void setChargeComponentMap(
			Map<String, List<ChargeComponent>> chargeComponentMap) {
		this.chargeComponentMap = chargeComponentMap;
	}

	/* Charges component */
	private BasicParseActionProcessor processor;
	
	public void processDigitalVoiceSubscription() {
		
	}
	
	public Customer getClonedCustomer() {
		return clonedCustomer;
	}

	public void setClonedCustomer(Customer clonedCustomer) {
		this.clonedCustomer = clonedCustomer;
	}
	
	public String getAccountNumber() {
		return accountNumber;
	}

	public void setAccountNumber(String accountNumber) {
		this.accountNumber = accountNumber;
	}
	
	public Date getLastPaymentReceivedDate() {
		return lastPaymentReceivedDate;
	}

	public void setLastPaymentReceivedDate(Date lastPaymentReceivedDate) {
		this.lastPaymentReceivedDate = lastPaymentReceivedDate;
	}
	
	public Date getBillingDate() {
		return billingDate;
	}

	public void setBillingDate(Date billingDate) {
		this.billingDate = billingDate;
	}

	public Date getBillingDueDate() {
		return billingDueDate;
	}

	public void setBillingDueDate(Date billingDueDate) {
		this.billingDueDate = billingDueDate;
	}

	public Date getCutoffStartDate() {
		return cutoffStartDate;
	}

	public void setCutoffStartDate(Date cutoffStartDate) {
		this.cutoffStartDate = cutoffStartDate;
	}

	public Date getCutoffEndDate() {
		return cutoffEndDate;
	}

	public void setCutoffEndDate(Date cutoffEndDate) {
		this.cutoffEndDate = cutoffEndDate;
	}

	public BigDecimal getLastPayment() {
		return lastPayment;
	}

	public void setLastPayment(BigDecimal lastPayment) {
		this.lastPayment = lastPayment;
	}

	public BigDecimal getPreviousBalance() {
		return previousBalance;
	}

	public void setPreviousBalance(BigDecimal previousBalance) {
		this.previousBalance = previousBalance;
	}

	public BigDecimal getPreviousPayment() {
		return previousPayment;
	}

	public void setPreviousPayment(BigDecimal previousPayment) {
		this.previousPayment = previousPayment;
	}

	public BigDecimal getTotalBalance() {
		return totalBalance;
	}

	public void setTotalBalance(BigDecimal totalBalance) {
		this.totalBalance = totalBalance;
	}
	public List<PaymentHistory> getPaymentHistoryList() {
		return paymentHistoryList;
	}

	public void setPaymentHistoryList(List<PaymentHistory> paymentHistoryList) {
		this.paymentHistoryList = paymentHistoryList;
	}



	

}
